`
https://leetcode.cn/problems/min-stack/
`


var MinStack = function () {
  // 记录栈中的所有元素
  this.stk = [];
  // 阶段性记录栈中的最小元素
  this.minStk = [];
};

/** 
* @param {number} val
* @return {void}
*/
MinStack.prototype.push = function (val) {
  this.stk.push(val);
  // 维护 minStk 栈顶为全栈最小元素
  if (this.minStk.length === 0 || val <= this.minStk[this.minStk.length - 1]) {
    // 新插入的这个元素就是全栈最小的
    this.minStk.push(val);
  }
};

/**
* @return {void}
*/
MinStack.prototype.pop = function () {
  if (this.stk[this.stk.length - 1] === this.minStk[this.minStk.length - 1]) {
    // 弹出的元素是全栈最小的
    this.minStk.pop();
  }
  this.stk.pop();
};

/**
* @return {number}
*/
MinStack.prototype.top = function () {
  return this.stk[this.stk.length - 1];
};

/**
* @return {number}
*/
MinStack.prototype.getMin = function () {
  // minStk 栈顶为全栈最小元素
  return this.minStk[this.minStk.length - 1];
};

/** 
* Your MinStack object will be instantiated and called as such:
* var obj = new MinStack()
* obj.push(val)
* obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.getMin()
*/